<?php
class Functions
{
    public static $dani = array('' => '', 1 => 'Ponedeljak', 2 => 'Utorak', 3 => 'Sreda', 4 => 'Četvrtak', 5 => 'Petak', 6 => 'Subota', 7 => 'Nedelja');
    public static $dani_simple = array('Ponedeljak', 'Utorak', 'Sreda', 'Četvrtak', 'Petak', 'Subota', 'Nedelja');
    public static $meseci_simple = array('Januar', 'Februar', 'Mart', 'April', 'Maj', 'Jun', 'Juli', 'Avgust', 'Septembar', 'Oktobar', 'Novembar', 'Decembar');
    public static $domen = 'skolskidnevnik.rs';
    public static $sms_cena = 5.8;
    // definise koji predmeti se opisno ocenjuju u kom smeru
    public static $opisni_predmeti = array('osn 1' => array(2, 1, 11, 4, 5, 12, 17, 18), 'osn 2' => array(17, 18), 'osn 3' => array(17, 18), 'osn 4' => array(17, 18), 'osn 5' => array(17, 18), 'osn 6' => array(17, 18), 'osn 7' => array(17, 18), 'osn 8' => array(17, 18), 'ver' => array(17), 'gra' => array(18), 'inf' => array(), 'nem' => array());

    public static function text($kratki)
    {
        $text = DbFinder::from('Opis')->where('Kratki', $kratki)->with('I18n')->findOne();
        if($text)
          return $text->getText();
    }

    // funkcija text koja se moze pozivati van symfony kontexta
    public static function textStatic($kratki)
    {
       $conn = mysql_connect("localhost", 'dnevnik', 'info2cebe')
         or die("Connection Failure to Database");
       mysql_select_db('dnevnik_dnevnik', $conn) or die ("Database not found.");

       $q = mysql_query("SET NAMES 'utf8'", $conn);
       $q = mysql_query("SELECT text FROM opis LEFT JOIN opis_i18n ON opis.id=opis_i18n.id WHERE kratki='$kratki' AND culture='sr'  LIMIT 1", $conn);
       $row = mysql_fetch_row($q);
       return $row[0];
    }

    public static function settings($kratki)
    {
        $text = DbFinder::from('Settings')->where('Kratki', $kratki)->with('I18n')->findOne();
        if($text)
          return $text->getText();
    }

    /**
    * sklanja kvacice: š -> s, č -> c...
    *
    * @param string $text
    * @param mixed $lower
    * @return string
    */
    public static function kvacice($text, $lower = NULL)
    {
        $slova_yeskvacice_0 = array("š", "đ", "č", "ć", "ž", "Ć", "Č", "Đ", "Š", "Ž");
        $slova_nokvacice_0 = array("s", "d", "c", "c", "z", "C", "C", "D", "S", "Z");
        $text = str_replace($slova_yeskvacice_0, $slova_nokvacice_0, $text);
        if($lower)
          $text = strtolower($text);
        return $text;
    }

  /**
  * Salje sms i email
  *
  * @param mixed $ucenik_id
  * @param mixed $text ocena, text domaceg, naslov obavestenja, izostanak
  * @param mixed $tip ocena, opisna, domaci, obavestenje, izostanak
  * @param mixed $opis opis za ocene, sadrzaj za obavestenje
  */
  public static function sendSms($ucenik_id, $text, $tip, $opis = '', $predmet_id = null)
  {
     if(date('G') > 17)
     {
        $sms_save = new SmsSave();
        $sms_save->setUcenikId($ucenik_id);
        $sms_save->setPredmetId($predmet_id);
        $sms_save->setText($text);
        $sms_save->setTip($tip);
        $sms_save->setOpis($opis);
        $sms_save->save();
        return;
     }

     $predmet = null;
     $roditelj = DbFinder::from('Roditelj')->
                 innerJoin('Roditelj.Id', 'Profil.Id')->
                 innerJoin('Roditelj.Id', 'Ucenik.RoditeljId')->
                 where('Ucenik.Id', $ucenik_id)->
                 withColumn('Profil.Mobilni', 'Mobilni')->
                 withColumn('Profil.EMail', 'EMail')->
                 findOne();
     if(!Functions::clanarina($roditelj))
       return;
     $ucenik = DbFinder::from('Profil')->findPk($ucenik_id);
     $mobilni = substr($roditelj->getColumn('Mobilni'), 1, 11);
     $mobilni = '381'.$mobilni;

     if($tip == 'ocena')
     {
        if($predmet_id)
          $predmet = DbFinder::from('Predmet')->select('PredmetNaziv')->findPk($predmet_id);
        $poruka_ema = '<html>
                         <body>
                           Poštovana porodice '.$ucenik->getPrezime().',<br />
                           Predmet: '.$predmet.'<br />
                           Danas, dana '.date("d.m.Y").' Vaše dete '.$ucenik->getIme().' je dobilo ocenu '.$text.' iz predmetnog gradiva.<br />';
        if($opis != '')
          $poruka_ema .= 'Obrazloženje: '.$opis.'.<br />';
        $poruka_ema .=  'Vaš internet školski dnevnik
                        </body>
                       </html>';
        $poruka_sms = 'Predmet '.$predmet.' Postovana porodice '.$ucenik->getPrezime().', danas '.date("d.m.Y").' Vase dete '.$ucenik->getIme().' je dobilo ocenu '.$text.'.';
     }

     else if($tip == 'opisna')
     {
        if($predmet_id)
          $predmet = DbFinder::from('Predmet')->select('PredmetNaziv')->findPk($predmet_id);
        $poruka_ema = '<html>
                         <body>
                           Poštovana porodice '.$ucenik->getPrezime().',<br />
                           Predmet: '.$predmet.'<br />
                           Danas, dana '.date("d.m.Y").' Vaše dete '.$ucenik->getIme().' je dobilo opisnu ocenu ';
                           if($text != '')
                             $poruka_ema .= 'nivoa '.$text.' ';
                           $poruka_ema .= '- '.$opis.'.<br />
                           Vaš internet školski dnevnik
                         </body>
                       </html>';
        $poruka_sms = 'Predmet '.$predmet.' Postovana porodice '.$ucenik->getPrezime().', danas '.date("d.m.Y").' Vase dete '.$ucenik->getIme().' je dobilo opisnu ocenu ';
        if($text != '')
          $poruka_sms .= 'nivoa '.$text.' ';
        $poruka_sms .= '- '.$opis.'.';
     }

     else if($tip == 'domaci')
     {
        if($predmet_id)
          $predmet = DbFinder::from('Predmet')->select('PredmetNaziv')->findPk($predmet_id);
        $poruka_ema = '<html>
                         <body>
                           Poštovana porodice '.$ucenik->getPrezime().',<br />
                           Danas, dana '.date("d.m.Y").' Vaše dete '.$ucenik->getIme().' iz predmeta '.$predmet.' ima domaći zadatak:<br />
                           '.$text.'.<br />
                           Vaš internet školski dnevnik
                         </body>
                       </html>';
        $poruka_sms = 'Predmet '.$predmet.' Postovana porodice '.$ucenik->getPrezime().', danas '.date("d.m.Y").' Vase dete '.$ucenik->getIme().' ima domaci zadatak: '.$text.'.';
     }

     else if($tip == 'izostanak')
     {
        if($predmet_id)
          $predmet = DbFinder::from('Predmet')->select('PredmetNaziv')->findPk($predmet_id);
        $poruka_ema = '<html>
                         <body>
                           Poštovana porodice '.$ucenik->getPrezime().',<br />
                           Danas, dana '.date("d.m.Y").' Vaše dete '.$ucenik->getIme().' nije prisutno na '.$text.' času.<br />';
        if($predmet)
          $poruka_ema .= 'Predmet '.$predmet.'.<br />';
        $poruka_ema .= 'Vaš internet školski dnevnik.<br />
                         </body>
                       </html>';
        $poruka_sms = 'Postovana porodice '.$ucenik->getPrezime().', danas '.date("d.m.Y").' Vase dete '.$ucenik->getIme().' nije prisutno na '.$text.' casu. ';
        if($predmet)
          $poruka_sms .= 'Predmet '.$predmet.'.';
     }

     else if($tip == 'obavestenje')
     {
        $poruka_ema = '<html>
                         <body>
                           '.$opis.'<br />
                           Vaš internet školski dnevnik
                         </body>
                       </html>';
        $poruka_sms = 'Postovani roditelji, '.$text.' - '.$opis;
     }

     // MAIL
     $headers = "MIME-Version: 1.0\r\n";
     $headers .= "Content-type: text/html; charset=utf-8\r\n";
     $headers .= "From: podrska@skolskidnevnik.rs\r\n";
     $headers .= "Reply-To: podrska@skolskidnevnik.rs\r\n";

     @mail($roditelj->getColumn('EMail'), ($tip != 'obavestenje') ? $tip : $text, $poruka_ema, $headers);


     if($roditelj->getKredit() <= self::$sms_cena)
       return;
     if(($tip == 'ocena' or $tip == 'opisna') and !$roditelj->getOcene())
       return;
     if($tip == 'domaci' and !$roditelj->getDomaci())
       return;
     if($tip == 'izostanak' and !$roditelj->getIzostanci())
       return;
     if($tip == 'obavestenje' and !$roditelj->getObavestenja())
       return;
     //SMS
     $headers_sms = "MIME-Version: 1.0\r\n";
     $headers_sms .= "Content-type: text/plain; charset=ISO-8859-1;\r\n";

     $poruka_sms = Functions::kvacice($poruka_sms);
     if(strlen($poruka_sms) > 160)
     {
        $poruka_sms = substr($poruka_sms, 0, 157).'...';
     }
     $sms_poruka = "user:naplata\r\npassword:despot041076\r\napi_id:3021337\r\nfrom:sk.dnevnik\r\nto:".$mobilni."\r\ntext:$poruka_sms";
     @mail("sms@messaging.clickatell.com", "", $sms_poruka, $headers_sms);
     $roditelj->setKredit($roditelj->getKredit() - self::$sms_cena);
     $roditelj->save();

     // log
     $sms_log = new SmsLog();
     $sms_log->setProfilId($roditelj->getId());
     $sms_log->setTip(SmsLogPeer::$tip[$tip]);
     $sms_log->save();

     if($roditelj->getKredit() < self::$sms_cena and !$roditelj->getClanarinaSoc())
     {
        $text = "Postovani,nemate vise kredita,molimo Vas uplatite kredit kako biste i dalje dobijali informacije iz skole.Detaljnije na www.skolskidnevnik.rs ili 011/275-4445.";
        $sms_poruka = "user:naplata\r\npassword:despot041076\r\napi_id:3021337\r\nfrom:sk.dnevnik\r\nto:".$mobilni."\r\ntext:$text";
        @mail("sms@messaging.clickatell.com", "", $sms_poruka, $headers_sms);
     }

  }

  public static function clanarina($roditelj)
  {
     if(strtotime($roditelj->getClanarina()) > time() or $roditelj->getClanarinaTst() or $roditelj->getClanarinaSoc())
       return 1;
     return 0;
  }

  public static function dani()
  {
    return self::$dani;
  }

  // MAILOVI
  // cPanel info
  protected static $cpuser = 'skolskrs'; // cPanel username
  protected static $cppass = 'abe1cebe2'; // cPanel password
  protected static $cpdomain = 'stari.skolskidnevnik.rs'; // cPanel domain or IP
  protected static $cpskin = 'x3';  // cPanel skin. Mostly x or x2.
  protected static $edomain = 'skolskidnevnik.rs'; // email domain (usually same as cPanel domain above)
  protected static $equota = 5; // amount of space in megabytes

  public static function nasEmail($profil_id)
  {
      if(strstr(DbFinder::from('Profil')->findPk($profil_id)->getEmail(), 'skolskidnevnik.rs'))
        return 1;
      else return 0;
  }

  public static function nasEmailNovi($email)
  {
      if(strstr(DbFinder::from('Profil')->findPk($profil_id)->getEmail(), 'skolskidnevnik.rs'))
        return 1;
      else return 0;
  }

  public static function deleteEmail($profil_id)
  {
      $email = DbFinder::from('Profil')->select('EMail')->where('Id', $profil_id)->findOne();
      $mail = new emailAccount(self::$edomain, self::$cpuser, self::$cppass, 2082, false, self::$cpskin, $email);
      if(!$mail->delete())
        return 0;

      return 1;
  }

  public static function newEmail($email, $password)
  {
      // return 1;
      ini_set('memory_limit', '100M');
      $mail = new emailAccount(self::$edomain, self::$cpuser, self::$cppass, 2082, false, self::$cpskin, $email);
      if(!$mail->create($password, self::$equota))
        if(!$mail->setPassword($password))
          return 0;

      return 1;
  }

  public static function postRedirect($data, $uri)
  {
      $print = '';
      $aQueryStrs = array();
      $print .= "<body onload='document.myform.submit();'>";
      $print .= "<form name='myform' action='$uri' method='post'>";

      foreach ($data as $key => $value)
      {
        $value = urlencode(stripslashes($value));
        $print .= "<input type='hidden' name='".$key."' value='".$value."'>";
        $aQueryStrs[] .= "$key=$value";
      }
      $print .="</form>";
      $print .= "</body>";

      return $print;
  }

  public static function week($year, $week)
  {
     if($year == '2009')
     {
        $week ++;
         $pon = date("Y-m-d", strtotime("{$year}-W{$week}-1")); //Returns the date of monday in week
         $uto = date("Y-m-d", strtotime("{$year}-W{$week}-2"));
         $sre = date("Y-m-d", strtotime("{$year}-W{$week}-3"));
         $cet = date("Y-m-d", strtotime("{$year}-W{$week}-4"));
         $pet = date("Y-m-d", strtotime("{$year}-W{$week}-5"));
         $sub = date("Y-m-d", strtotime("{$year}-W{$week}-6")); //Returns the date of saturday in week
     }


      else if($year == '2010')
      {
         $week --;
         $pon = date("Y-m-d", strtotime("$year-1-1 +$week week +3 day"));//Returns the date of monday in week
         $uto = date("Y-m-d", strtotime("$year-1-1 +$week week +4 day"));
         $sre = date("Y-m-d", strtotime("$year-1-1 +$week week +5 day"));
         $cet = date("Y-m-d", strtotime("$year-1-1 +$week week +6 day"));
         $pet = date("Y-m-d", strtotime("$year-1-1 +$week week +7 day"));
         $sub = date("Y-m-d", strtotime("$year-1-1 +$week week +8 day")); //Returns the date of saturday in week
      }
      return array($pon, $uto, $sre, $cet, $pet, $sub);
  }

  public static function period()
  {
      $mesec = date('n');
      if($mesec == 1 and date('d') < 30 and date('Y') == 2010)
         return 1;
      if($mesec > 8 and $mesec <= 12)
        return 1;
      else return 2;
  }

  public static function periodZakljucna()
  {
      $mesec = date('n');
      if($mesec > 8 and $mesec <= 12)
        return 1;
      else if($mesec > 4 and $mesec <= 8)
        return 2;
  }

  public static function skolskaGodina()
  {
     $godina = date('Y');
      if(self::period() == 1)
        return $godina.'/'.($godina + 1);
      else return ($godina - 1).'/'.$godina;
  }

  public static function image($id, $pol, $roditelj = null)
  {
     $class = '';
     if($roditelj)
       if(self::clanarina($roditelj))
         $class = 'ima_clanarinu';
      if(file_exists(sfConfig::get('sf_web_dir').'/images/profil/'.$id.'.jpg'))
        return "<img src='/images/profil/".$id.".jpg' alt='".ProfilPeer::$pol."' class='$class' />";
      return "<img src='/images/".array_search($pol, ProfilPeer::$pol).".gif' alt='".$pol."' class='$class' />";
  }

  public static function datumSr($datum, $vreme=0)
  {
     if(!$vreme)
       return $datum[8].$datum[9].'.'.$datum[5].$datum[6].'.'.$datum[0].$datum[1].$datum[2].$datum[3].'.';
     else return $datum[8].$datum[9].'.'.$datum[5].$datum[6].'.'.$datum[0].$datum[1].$datum[2].$datum[3].'. '.$datum[11].$datum[12].':'.$datum[14].$datum[15];
  }

  public static function datumEn($datum)
  {
     return $datum[6].$datum[7].$datum[8].$datum[9].'-'.$datum[3].$datum[4].'-'.$datum[0].$datum[1];
  }

  public static function mb_ucwords($s)
  {
     $s = mb_strtolower($s, 'UTF-8');
     $s_exp = explode(' ', $s);

     $s = '';
     foreach($s_exp as $str)
     {
       $s .= mb_strtoupper(mb_substr($str, 0, 1, 'UTF-8')).mb_substr($str, 1, (mb_strlen($str, 'UTF-8') + 1), 'UTF-8').' ';
     }

     return trim($s);
  }

  public static function cirLat($text, $smer=0)
  {
     $latin_0 = array("Lj", "Nj","Dž","lj","nj","dž");
     $cir_0 = array("Љ", "Њ","Џ","љ", "њ","џ");
     $latin = array("A", "B", "V", "G", "D","Đ", "E", "Ž", "Z", "I", "J", "K", "L","M", "N", "O", "P", "R", "S","T", "Ć", "U", "F", "H", "C", "Č","Š", "a", "b", "v", "g", "d", "đ", "e", "ž", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s","t", "ć", "u", "f", "h", "c", "č", "š");
     $cir = array("А","Б","В","Г","Д", "Ђ", "Е", "Ж", "З", "И", "Ј", "К", "Л", "М", "Н","О","П", "Р","С","Т", "Ћ", "У", "Ф","Х", "Ц", "Ч", "Ш","а","б","в","г","д", "ђ", "е", "ж", "з", "и", "ј", "к", "л", "м", "н","о","п", "р","с","т", "ћ", "у", "ф","х", "ц", "ч", "ш");

     if(!$smer)
     {
       $text = str_replace($cir_0, $latin_0, $text);
       $text = str_replace($cir, $latin, $text);
     }
     else
     {
       $text = str_replace($latin_0, $cir_0, $text);
       $text = str_replace($latin, $cir, $text);
     }

     return($text);
  }

}